/** yipaidingcan
 * - 商品 {云对象} 商品&商品分类系列操作
 *  第三方技术支持来自uniCloud云对象教程: https://uniapp.dcloud.net.cn/uniCloud/cloud-obj
 * jsdoc语法提示教程：https://ask.dcloud.net.cn/docs/#//ask.dcloud.net.cn/article/129
 * @param tel 17664189378 冀**
 */
//自动生成货号
function getGoodsSn() {
	const date = new Date();
	const goodsSn = 'Y' + date.getFullYear() + '' + date.getMonth() + '' + date.getDay() + '' + date
		.getHours() + '' + date.getMinutes() + '' + date.getSeconds() + '' + Math.round(Math.random());
	return goodsSn;
}
// 商品重定义
function redefiningGoods(formData, type) {
	var Data = formData
	delete formData._id;
	for (var i = 0; i < formData.sku.attr.length; i++) {
		Data.sku.attr[i].price = formData.sku.attr[i].price * 1000 / 10;
	}
	Data.price = parseFloat(formData.price) * 1000 / 10;
	Data.pack_price = parseFloat(formData.pack_price * 1000 / 10);
	Data.group_price = parseFloat(formData.group_price * 1000 / 10);
	Data.initial_purchase = parseFloat(formData.initial_purchase);
	Data.other_price = formData.other_price ? formData.other_price * 1000 / 10 : '';
	if (!type) {
		Data.goods_sn = getGoodsSn(); // 订单号
	}
	return Data
}
module.exports = {
	_before: function() { // 通用预处理器
	},
	/**
	 * 修改商品
	 * @param {object} Data 要修改商品数据
	 * @param {string} tempCategories 商品上次所在的分类ID
	 * @returns {object} 返回值描述
	 */
	async editGoods(Data,goodsId,tempCategories){
		// 参数校验
		if (!Data || !tempCategories || !goodsId ) {
			return {error: '参数不完整',code: 404};
		}
		const dbjql = uniCloud.databaseForJQL()
		const db = uniCloud.database()
		try{
			Data = redefiningGoods(Data, true)
			 // 查询店铺数据
			const shopData = await dbjql.collection("shop").where({_id:Data.shop_id}).field("_id,title,location,categories").get({getOne:true})
		// 更新分类商品数量
			await db.collection('shop-categories').where({_id:tempCategories}).update({goods_number: db.command.inc(-1)});// 减少商品上次所在的分类数量
			await db.collection('shop-categories').where({_id:Data.category_id}).update({goods_number: db.command.inc(1)});// 增加商品这次所修改的分类数量
		// 修改商品
			const result = await dbjql.collection("goods").doc(goodsId).update(Data)
			
		// 更新店铺关键词
			const goodsData = await dbjql.collection("goods").where({shop_id : Data.shop_id}).limit(999).field("_id,name").get({getOne:false})
			const processedData = goodsData.data.map((item, index) => {
				return item.name; // 返回处理后的结果
			});
			await db.collection('shop').where({_id:Data.shop_id}).update({
				keywords: processedData,
				goods: processedData.length
			});
			
			return {
				code:200,
				message:'操作成功',
				result:result,
			}
		}catch(err){
			return {
				error: '内部错误',
				code: 500,
				message: err,
			};
			dbJQL.collection('users_log').add({
				type:2,
				text:`店铺${Data.shop_id},在‘获取可提现金额’方法时发生错误：${err}`
			})
		}
	},
	
	/**
	 * 添加商品
	 * @param {object} Data 要添加商品数据
	 * @returns {object} 返回值描述
	 */
	async addGoods(Data) {
		// 参数校验
		if (!Data) {
			return {error: '参数不完整',code: 404};
		}
		const dbjql = uniCloud.databaseForJQL()
		const db = uniCloud.database()
		try{
			// 查询店铺数据
			const shopData = await dbjql.collection("shop").where({_id:Data.shop_id}).field("_id,title,location,categories").get({getOne:true})
			Data = redefiningGoods(Data, false)
			Data.location = shopData.data.location
			Data.shop_category_id = shopData.data.categories
		// 更新分类商品数量
			await db.collection('shop-categories').where({_id:Data.category_id}).update({
				goods_number: db.command.inc(1)
			});
		// 更新店铺关键词
			await db.collection('shop').where({_id:Data.shop_id}).update({
				keywords: db.command.push(Data.name),
				goods: db.command.inc(1)
			});
			
		// Add New commodity
			var result = await dbjql.collection("goods").add(Data)
			return {
				code:200,
				message:'操作成功',
				result,
			}
			
		}catch(err){
			return {
				error: '内部错误',
				code: 500,
				message: err,
			};
			dbJQL.collection('users_log').add({
				type:2,
				text:`店铺${Data.shop_id},在‘获取可提现金额’方法时发生错误：${err}`
			})
		}
		
	}




}